\hypertarget{kernels_8h}{
\section{\-Dokumentacja pliku \-C\-:/\-Users/boski/\-Documents/\-Visual \-Studio 2008/\-Projects/cuda/blms/kernels.h}
\label{kernels_8h}\index{\-C\-:/\-Users/boski/\-Documents/\-Visual Studio 2008/\-Projects/cuda/blms/kernels.\-h@{\-C\-:/\-Users/boski/\-Documents/\-Visual Studio 2008/\-Projects/cuda/blms/kernels.\-h}}
}


\-Funkcje urządzenia (kernele) -\/ wykonywane na \-G\-P\-U.  


{\ttfamily \#include \char`\"{}define.\-h\char`\"{}}\*
{\ttfamily \#include \char`\"{}cudacomplex.\-h\char`\"{}}\*
\subsection*{\-Funkcje}
\begin{DoxyCompactItemize}
\item 
void \hyperlink{kernels_8h_a16b04828b038dd8093c2e4846c511c19}{set\-M\-B} (int \-M, int \-B)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_a230d277a692956688e6e495246b0c321}{blms\-\_\-kernel} (float beta, float $\ast$lambda, cudacomplex $\ast$\-U, cudacomplex $\ast$\-U\-\_\-sub, cudacomplex $\ast$\-Y, cudacomplex $\ast$lc)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_ae7b808c116932366697e7710c464ca73}{coef\-\_\-kernel} (float mi, float $\ast$lambda, cudacomplex $\ast$\-U\-\_\-sub, cudacomplex $\ast$\-E, cudacomplex $\ast$lc)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_af00b15158a6e3280fcf305ec4e55fdb3}{blms\-\_\-kernel\-\_\-streams} (float beta, float $\ast$lambda, cudacomplex $\ast$\-U, cudacomplex $\ast$\-U\-\_\-sub, cudacomplex $\ast$\-Y, cudacomplex $\ast$lc)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_a7c293ad4c0a09bda4ce8e3d82d9917b4}{coef\-\_\-kernel\-\_\-streams} (float mi, float $\ast$lambda, cudacomplex $\ast$\-U\-\_\-sub, cudacomplex $\ast$\-E, cudacomplex $\ast$lc)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_a8a17e4efb88df7eabb48366a1d378e62}{buf\-\_\-u\-\_\-kernel} (int i, cudacomplex $\ast$u, cudacomplex $\ast$buf\-\_\-u)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_a86c8de05d5bdf0168267589628ad39de}{buf\-\_\-e\-\_\-kernel} (int i, cudacomplex $\ast$e, cudacomplex $\ast$d, cudacomplex $\ast$buf\-\_\-e, cudacomplex $\ast$buf\-\_\-y)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_a78b895ea9c89864251581926e0df2312}{buf\-\_\-e\-\_\-kernel1} (int i, cudacomplex $\ast$d, cudacomplex $\ast$buf\-\_\-e, cudacomplex $\ast$buf\-\_\-y)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_a285a20d516454877fd2e14c2550fe371}{buf\-\_\-e\-\_\-kernel2} (int i, cudacomplex $\ast$e, cudacomplex $\ast$buf\-\_\-e)
\item 
\-\_\-\-\_\-global\-\_\-\-\_\- void \hyperlink{kernels_8h_ab774854cbe345262aa4c91e225e80324}{overlap\-\_\-and\-\_\-save\-\_\-kernel} (cudacomplex $\ast$buf\-\_\-u)
\end{DoxyCompactItemize}
\subsection*{\-Zmienne}
\begin{DoxyCompactItemize}
\item 
\hypertarget{kernels_8h_a81e108a85a44ce2636a539aa09bdf929}{
\-\_\-\-\_\-constant\-\_\-\-\_\- int \hyperlink{kernels_8h_a81e108a85a44ce2636a539aa09bdf929}{dev\-\_\-\-M}}
\label{kernels_8h_a81e108a85a44ce2636a539aa09bdf929}

\begin{DoxyCompactList}\small\item\em długość filtru (parametr przechowywany w pamięci stałej urządzenia) \end{DoxyCompactList}\item 
\hypertarget{kernels_8h_a0b0ff6cfa2cd5adc46caaa9bd4224697}{
\-\_\-\-\_\-constant\-\_\-\-\_\- int \hyperlink{kernels_8h_a0b0ff6cfa2cd5adc46caaa9bd4224697}{dev\-\_\-\-B}}
\label{kernels_8h_a0b0ff6cfa2cd5adc46caaa9bd4224697}

\begin{DoxyCompactList}\small\item\em długość bloku danych (parametr przechowywany w pamięci stałej urządzenia) \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{\-Opis szczegółowy}
\-Funkcje urządzenia (kernele) -\/ wykonywane na \-G\-P\-U. \-Deklaracja funkcji urządzenia (kernels) dla struktur filter\-B\-L\-M\-S\-\_\-\-G\-P\-U$\ast$$\ast$$\ast$$\ast$

\begin{DoxyAuthor}{\-Autor}
\-Jakub \-Kołakowski (mailto\-:\href{mailto:kolakowski.jakub@gmail.com}{\tt kolakowski.\-jakub@gmail.\-com}) 
\end{DoxyAuthor}
\begin{DoxyVersion}{\-Wersja}
1.\-2 
\end{DoxyVersion}


\subsection{\-Dokumentacja funkcji}
\hypertarget{kernels_8h_a230d277a692956688e6e495246b0c321}{
\index{kernels.\-h@{kernels.\-h}!blms\-\_\-kernel@{blms\-\_\-kernel}}
\index{blms\-\_\-kernel@{blms\-\_\-kernel}!kernels.h@{kernels.\-h}}
\subsubsection[{blms\-\_\-kernel}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void blms\-\_\-kernel (
\begin{DoxyParamCaption}
\item[{float}]{beta, }
\item[{float $\ast$}]{lambda, }
\item[{cudacomplex $\ast$}]{\-U, }
\item[{cudacomplex $\ast$}]{\-U\-\_\-sub, }
\item[{cudacomplex $\ast$}]{\-Y, }
\item[{cudacomplex $\ast$}]{lc}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a230d277a692956688e6e495246b0c321}
\-Funkcja urządzenia wywoływana z poziomu hosta, wyznacza wyjścia podfiltrów (zwracane jako wskaźnik $\ast$\-Y).


\begin{DoxyParams}{\-Parametry}
{\em beta} & \\
\hline
{\em $\ast$lambda} & \\
\hline
{\em $\ast$\-U} & -\/ bufor zawierający dwa bloki sygnału u po działaniu \-F\-F\-T \\
\hline
{\em $\ast$\-U\-\_\-sub} & -\/ bufory 'podsygnałow' wejściowych po \-F\-F\-T (2\-B wektorów o długości \-M/\-B w postaci jednego wektora \\
\hline
{\em $\ast$\-Y} & -\/ próbki 'podsygnałow' wyjściowych przed \-I\-F\-F\-T \\
\hline
{\em $\ast$lc} & -\/ wagi filtrów \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_af00b15158a6e3280fcf305ec4e55fdb3}{
\index{kernels.\-h@{kernels.\-h}!blms\-\_\-kernel\-\_\-streams@{blms\-\_\-kernel\-\_\-streams}}
\index{blms\-\_\-kernel\-\_\-streams@{blms\-\_\-kernel\-\_\-streams}!kernels.h@{kernels.\-h}}
\subsubsection[{blms\-\_\-kernel\-\_\-streams}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void blms\-\_\-kernel\-\_\-streams (
\begin{DoxyParamCaption}
\item[{float}]{beta, }
\item[{float $\ast$}]{lambda, }
\item[{cudacomplex $\ast$}]{\-U, }
\item[{cudacomplex $\ast$}]{\-U\-\_\-sub, }
\item[{cudacomplex $\ast$}]{\-Y, }
\item[{cudacomplex $\ast$}]{lc}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_af00b15158a6e3280fcf305ec4e55fdb3}
\-Funkcja urządzenia wywoływana z poziomu hosta, wyznacza wyjścia podfiltrów (zwracane jako wskaźnik $\ast$\-Y).\par
 \-Wersja przeznaczona do działania ze strumieniami ('tid $<$ \-B' zamiast 'tid $<$ 2 $\ast$ \-B').


\begin{DoxyParams}{\-Parametry}
{\em beta} & \\
\hline
{\em $\ast$lambda} & \\
\hline
{\em $\ast$\-U} & -\/ bufor zawierający dwa bloki sygnału u po działaniu \-F\-F\-T \\
\hline
{\em $\ast$\-U\-\_\-sub} & -\/ bufory 'podsygnałow' wejściowych po \-F\-F\-T (2\-B wektorów o długości \-M/\-B w postaci jednego wektora \\
\hline
{\em $\ast$\-Y} & -\/ próbki 'podsygnałow' wyjściowych przed \-I\-F\-F\-T \\
\hline
{\em $\ast$lc} & -\/ wagi filtrów \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_a86c8de05d5bdf0168267589628ad39de}{
\index{kernels.\-h@{kernels.\-h}!buf\-\_\-e\-\_\-kernel@{buf\-\_\-e\-\_\-kernel}}
\index{buf\-\_\-e\-\_\-kernel@{buf\-\_\-e\-\_\-kernel}!kernels.h@{kernels.\-h}}
\subsubsection[{buf\-\_\-e\-\_\-kernel}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void buf\-\_\-e\-\_\-kernel (
\begin{DoxyParamCaption}
\item[{int}]{i, }
\item[{cudacomplex $\ast$}]{e, }
\item[{cudacomplex $\ast$}]{d, }
\item[{cudacomplex $\ast$}]{buf\-\_\-e, }
\item[{cudacomplex $\ast$}]{buf\-\_\-y}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a86c8de05d5bdf0168267589628ad39de}
\-Funkcja urządzenia wywoływana z poziomu hosta, pobiera blok danych sygnału odniesienia d, wyznacza bufor sygnału błędu oraz formuje wyjściowy sygnał błędu e.


\begin{DoxyParams}{\-Parametry}
{\em i} & -\/ indeks próbki sygnału d \\
\hline
{\em $\ast$e} & -\/ wyjściowy -\/ błędu (error) \\
\hline
{\em $\ast$d} & -\/ odniesienia (desired) \\
\hline
{\em $\ast$buf\-\_\-e} & -\/ blok/bufor (dlugosc 2\-B) sygnalu e \\
\hline
{\em $\ast$buf\-\_\-y} & -\/ blok/bufor (dlugosc 2\-B) sygnalu y \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_a78b895ea9c89864251581926e0df2312}{
\index{kernels.\-h@{kernels.\-h}!buf\-\_\-e\-\_\-kernel1@{buf\-\_\-e\-\_\-kernel1}}
\index{buf\-\_\-e\-\_\-kernel1@{buf\-\_\-e\-\_\-kernel1}!kernels.h@{kernels.\-h}}
\subsubsection[{buf\-\_\-e\-\_\-kernel1}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void buf\-\_\-e\-\_\-kernel1 (
\begin{DoxyParamCaption}
\item[{int}]{i, }
\item[{cudacomplex $\ast$}]{d, }
\item[{cudacomplex $\ast$}]{buf\-\_\-e, }
\item[{cudacomplex $\ast$}]{buf\-\_\-y}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a78b895ea9c89864251581926e0df2312}
\-Pierwsza część podzielonej funkcji buf\-\_\-e\-\_\-kernel.\par
 \-Funkcja urządzenia wywoływana z poziomu hosta, pobiera blok danych sygnału odniesienia d oraz wyznacza bufor sygnału błędu.


\begin{DoxyParams}{\-Parametry}
{\em i} & -\/ indeks próbki sygnału d \\
\hline
{\em $\ast$d} & -\/ odniesienia (desired) \\
\hline
{\em $\ast$buf\-\_\-e} & -\/ blok/bufor (dlugosc 2\-B) sygnalu e \\
\hline
{\em $\ast$buf\-\_\-y} & -\/ blok/bufor (dlugosc 2\-B) sygnalu y \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_a285a20d516454877fd2e14c2550fe371}{
\index{kernels.\-h@{kernels.\-h}!buf\-\_\-e\-\_\-kernel2@{buf\-\_\-e\-\_\-kernel2}}
\index{buf\-\_\-e\-\_\-kernel2@{buf\-\_\-e\-\_\-kernel2}!kernels.h@{kernels.\-h}}
\subsubsection[{buf\-\_\-e\-\_\-kernel2}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void buf\-\_\-e\-\_\-kernel2 (
\begin{DoxyParamCaption}
\item[{int}]{i, }
\item[{cudacomplex $\ast$}]{e, }
\item[{cudacomplex $\ast$}]{buf\-\_\-e}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a285a20d516454877fd2e14c2550fe371}
\-Druga część podzielonej funkcji buf\-\_\-e\-\_\-kernel.\par
 \-Funkcja urządzenia wywoływana z poziomu hosta, formuje wyjściowy sygnał błędu e.


\begin{DoxyParams}{\-Parametry}
{\em i} & -\/ indeks próbki sygnału e \\
\hline
{\em $\ast$e} & -\/ wyjściowy -\/ błędu (error) \\
\hline
{\em $\ast$buf\-\_\-e} & -\/ blok/bufor (dlugosc 2\-B) sygnalu e \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_a8a17e4efb88df7eabb48366a1d378e62}{
\index{kernels.\-h@{kernels.\-h}!buf\-\_\-u\-\_\-kernel@{buf\-\_\-u\-\_\-kernel}}
\index{buf\-\_\-u\-\_\-kernel@{buf\-\_\-u\-\_\-kernel}!kernels.h@{kernels.\-h}}
\subsubsection[{buf\-\_\-u\-\_\-kernel}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void buf\-\_\-u\-\_\-kernel (
\begin{DoxyParamCaption}
\item[{int}]{i, }
\item[{cudacomplex $\ast$}]{u, }
\item[{cudacomplex $\ast$}]{buf\-\_\-u}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a8a17e4efb88df7eabb48366a1d378e62}
\-Funkcja urządzenia wywoływana z poziomu hosta, pobiera blok danych sygnału wejściowego u.\par
 \-Wykonuje także operację overlap-\/and-\/save (zachowanie starszego bloku danych).\par
 !!!operacja wykonywana na początku pętli filtracji ogranicza wywołania kerneli!!!


\begin{DoxyParams}{\-Parametry}
{\em i} & -\/ indeks próbki sygnału u, która będzie pierwsza w nowym bloku danych \\
\hline
{\em $\ast$u} & -\/ sygnał wejściowy (input) \\
\hline
{\em $\ast$buf\-\_\-u} & -\/ bufor zawierający dwa bloki sygnału u \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_ae7b808c116932366697e7710c464ca73}{
\index{kernels.\-h@{kernels.\-h}!coef\-\_\-kernel@{coef\-\_\-kernel}}
\index{coef\-\_\-kernel@{coef\-\_\-kernel}!kernels.h@{kernels.\-h}}
\subsubsection[{coef\-\_\-kernel}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void coef\-\_\-kernel (
\begin{DoxyParamCaption}
\item[{float}]{mi, }
\item[{float $\ast$}]{lambda, }
\item[{cudacomplex $\ast$}]{\-U\-\_\-sub, }
\item[{cudacomplex $\ast$}]{\-E, }
\item[{cudacomplex $\ast$}]{lc}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_ae7b808c116932366697e7710c464ca73}
\-Funkcja urządzenia wywoływana z poziomu hosta, wyznacza współczynniki podfiltrów.


\begin{DoxyParams}{\-Parametry}
{\em mi} & \\
\hline
{\em $\ast$lambda} & \\
\hline
{\em $\ast$\-U\-\_\-sub} & -\/ bufory 'podsygnałow' wejściowych po \-F\-F\-T (2\-B wektorów o długości \-M/\-B w postaci jednego wektora \\
\hline
{\em $\ast$\-E} & -\/ bufor zawierajacy dwa bloki sygnalu e po dzialaniu \-F\-F\-T \\
\hline
{\em $\ast$lc} & -\/ wagi filtrów \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_a7c293ad4c0a09bda4ce8e3d82d9917b4}{
\index{kernels.\-h@{kernels.\-h}!coef\-\_\-kernel\-\_\-streams@{coef\-\_\-kernel\-\_\-streams}}
\index{coef\-\_\-kernel\-\_\-streams@{coef\-\_\-kernel\-\_\-streams}!kernels.h@{kernels.\-h}}
\subsubsection[{coef\-\_\-kernel\-\_\-streams}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void coef\-\_\-kernel\-\_\-streams (
\begin{DoxyParamCaption}
\item[{float}]{mi, }
\item[{float $\ast$}]{lambda, }
\item[{cudacomplex $\ast$}]{\-U\-\_\-sub, }
\item[{cudacomplex $\ast$}]{\-E, }
\item[{cudacomplex $\ast$}]{lc}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a7c293ad4c0a09bda4ce8e3d82d9917b4}
\-Funkcja urządzenia wywoływana z poziomu hosta, wyznacza współczynniki podfiltrów.\par
 \-Wersja przeznaczona do działania ze strumieniami ('tid $<$ \-B' zamiast 'tid $<$ 2 $\ast$ \-B').


\begin{DoxyParams}{\-Parametry}
{\em mi} & \\
\hline
{\em $\ast$lambda} & \\
\hline
{\em $\ast$\-U\-\_\-sub} & -\/ bufory 'podsygnałow' wejściowych po \-F\-F\-T (2\-B wektorów o długości \-M/\-B w postaci jednego wektora \\
\hline
{\em $\ast$\-E} & -\/ bufor zawierajacy dwa bloki sygnalu e po dzialaniu \-F\-F\-T \\
\hline
{\em $\ast$lc} & -\/ wagi filtrów \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_ab774854cbe345262aa4c91e225e80324}{
\index{kernels.\-h@{kernels.\-h}!overlap\-\_\-and\-\_\-save\-\_\-kernel@{overlap\-\_\-and\-\_\-save\-\_\-kernel}}
\index{overlap\-\_\-and\-\_\-save\-\_\-kernel@{overlap\-\_\-and\-\_\-save\-\_\-kernel}!kernels.h@{kernels.\-h}}
\subsubsection[{overlap\-\_\-and\-\_\-save\-\_\-kernel}]{\setlength{\rightskip}{0pt plus 5cm}\-\_\-\-\_\-global\-\_\-\-\_\- void overlap\-\_\-and\-\_\-save\-\_\-kernel (
\begin{DoxyParamCaption}
\item[{cudacomplex $\ast$}]{buf\-\_\-u}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_ab774854cbe345262aa4c91e225e80324}
\-Funkcja urządzenia wywoływana z poziomu hosta, wykonuje operację overlap-\/and-\/save.\par
 \-Może zostać zastąpiona instrukcją o podobnym czasie wykonania\-: 
\begin{DoxyCode}
 cudaMemcpy(dev_buf_u + B, dev_buf_u, B * sizeof(cudacomplex), 
      cudaMemcpyDeviceToDevice); 
\end{DoxyCode}



\begin{DoxyParams}{\-Parametry}
{\em $\ast$buf\-\_\-u} & -\/ bufor zawierający dwa bloki sygnału u \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
\hypertarget{kernels_8h_a16b04828b038dd8093c2e4846c511c19}{
\index{kernels.\-h@{kernels.\-h}!set\-M\-B@{set\-M\-B}}
\index{set\-M\-B@{set\-M\-B}!kernels.h@{kernels.\-h}}
\subsubsection[{set\-M\-B}]{\setlength{\rightskip}{0pt plus 5cm}void set\-M\-B (
\begin{DoxyParamCaption}
\item[{int}]{\-M, }
\item[{int}]{\-B}
\end{DoxyParamCaption}
)}}
\label{kernels_8h_a16b04828b038dd8093c2e4846c511c19}
\-Funkcja zapisująca w pamięci constant urządzenia parametry \-M i \-B.


\begin{DoxyParams}{\-Parametry}
{\em \-M} & -\/ długość filtru \\
\hline
{\em \-B} & -\/ długość bloku \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Zwraca}
void 
\end{DoxyReturn}
